--- title: "74. Search a 2D Matrix" created: 2025-12-22 --- # 74. Search a 2D Matrix ## 题目 [**74. Search a 2D Matrix**](https://leetcode.com/problems/search-a-2d-matrix/) ![[image-70b5a8b5.png]] ## 思路分析 首先想法是 - **对第一列进行二分**:找到最后一个满足 `matrix[i][0] <= target` 的行索引 `row`。 - **对该行进行二分**:在 `matrix[row]` 这个数组里查找 `target`。 其实观察可以发现 其实按照先行再列的顺序走下去 他也是递增的 可以2维转1维 只做一次二分 ## 代码实现 ```java class Solution { public boolean searchMatrix(int[][] matrix, int target) { int m = matrix.length; int n = matrix[0].length; int top=0,bottom=m-1; int row = -1; while(top<=bottom){ int mid = top+bottom>>1; if(matrix[mid][0]<=target){ row=mid; top=mid+1; }else{ bottom=mid-1; } } if(row == -1) return false; int l=0,r=n-1; while(l<=r){ int mid=l+r>>1; if(matrix[row][mid]==target){ return true; }else if(matrix[row][mid]>1; int val=matrix[mid/n][mid%n]; if(val==target){ return true; }else if(val